package admin

import (
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"mojieshi/define"
	"mojieshi/models"
	"net/http"
)

type RoltAdd struct {
	RoleId  int   `json:"role_id"`
	MenuIds []int `json:"menu_ids"`
}

// 权限新增
func RoltEditAdd(c *gin.Context) {
	//获取数据
	var jsonData RoltAdd
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		define.Response.ResultFail(c, 10000, define.JsonData, "")
		return
	}
	tx := models.DB.Begin() //开始事务

	//查询是否存在原有数据
	err = RoltAddDel(jsonData.RoleId, tx)
	if err != nil {
		define.Response.ResultFail(c, 10001, err.Error(), "")
		tx.Rollback()
		return
	}
	//批量插入数据
	var listData []models.MRolt
	for _, v := range jsonData.MenuIds {
		one := models.MRolt{
			RoleId: jsonData.RoleId,
			MenuId: v,
		}
		listData = append(listData, one)
	}
	//批量执行
	err = tx.Model(new(models.MRolt)).Create(&listData).Error
	if err != nil {
		define.Response.ResultFail(c, 10002, err.Error(), "")
		tx.Rollback()
		return
	}
	tx.Commit()

	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功",
	})
}

// 查询是否存在原有数据有就删除
func RoltAddDel(id int, tx *gorm.DB) error {
	var roltlist []models.MRolt
	var count int64
	err := models.DB.Model(new(models.MRolt)).Where("role_id=?", id).Count(&count).Find(&roltlist).Error
	if err != nil {
		return err
	}
	//判断是否有数据
	if count > 0 {
		tx.Where("role_id=?", id).Delete(models.MRolt{})
	}
	return nil
}
